package handler

import (
	"boy-go/middlewares"
	"boy-go/modules/system/service"
	"boy-go/modules/system/vo"
	"boy-go/pkg/response"
	"boy-go/pkg/xnum"
	"github.com/gin-gonic/gin"
	"strings"
)

// AddSysPostRouter 添加路由
func AddSysPostRouter(group *gin.RouterGroup) {
	group.GET("/post/:id", middlewares.HasPermission("system:post:query"), get_post)
	group.GET("/post/list", middlewares.HasPermission("system:post:list"), list_post)
	group.POST("/post", middlewares.HasPermission("system:post:add"), middlewares.Logger("岗位信息表", middlewares.INSERT), add_post)
	group.PUT("/post", middlewares.HasPermission("system:post:edit"), middlewares.Logger("岗位信息表", middlewares.UPDATE), edit_post)
	group.DELETE("/post/:ids", middlewares.HasPermission("system:post:remove"), middlewares.Logger("岗位信息表", middlewares.DELETE), del_post)
}

// get_post
// @Summary 获取岗位信息表详情
// @Description 获取岗位信息表详情（管理页面）
// @Tags system-post
// @Accept json
// @Produce json
// @Param id path string true "ID"
// @Success 200 {object} response.R[vo.SysPostModel] "ok"
// @Failure 400 {string} string "bad request"
// @Failure 500 {string} string "Internal Server Error"
// @Router /system/post/{id} [get]
func get_post(ctx *gin.Context) {
	var idStr = ctx.Param("id")
	id := xnum.Str2int64(idStr)
	m, err := service.NewSysPostService().GetById(id)
	if err != nil {
		response.AjaxError(ctx, err)
		return
	}
	response.AjaxSuccess(ctx, m)
}

// list_post
// @Summary 获取岗位信息表列表
// @Description 获取岗位信息表列表（管理页面）
// @Tags system-post
// @Accept json
// @Produce json
// @Success 200 {object} response.R[PageRes[vo.SysPostModel]] "ok"
// @Failure 400 {string} string "bad request"
// @Failure 500 {string} string "Internal Server Error"
// @Router /system/post/list [get]
func list_post(ctx *gin.Context) {
	req := vo.QuerySysPostReq{}
	if err := ctx.BindQuery(&req); err != nil {
		response.AjaxError(ctx, err)
		return
	}
	page, err := service.NewSysPostService().List(&req)
	if err != nil {
		response.AjaxError(ctx, err)
		return
	}
	response.AjaxDataTable(ctx, page.List, page.Total)
}

// add_post
// @Summary 新增岗位信息表
// @Description 新增岗位信息表（管理页面）
// @Tags system-post
// @Accept json
// @Produce json
// @Param req body  vo.AddSysPostReq true "req"
// @Success 200 {object} response.R[vo.AddSysPostRsp] "ok"
// @Failure 400 {string} string "bad request"
// @Failure 500 {string} string "Internal Server Error"
// @Router /system/post [post]
func add_post(ctx *gin.Context) {
	var req vo.AddSysPostReq
	if err := ctx.ShouldBind(&req); err != nil {
		response.AjaxFailCode(ctx, response.ParamError)
		return
	}
	m, err := service.NewSysPostService().Add(&req)
	if err != nil {
		response.AjaxFailCode(ctx, response.ServerError)
	} else {
		response.AjaxSuccess(ctx, m)
	}
}

// edit_post
// @Summary 编辑岗位信息表
// @Description 编辑岗位信息表（管理页面）
// @Tags system-post
// @Accept json
// @Produce json
// @Param req body  vo.EditSysPostReq true "req"
// @Success 200 {object} response.R[vo.EditSysPostRsp] "ok"
// @Failure 400 {string} string "bad request"
// @Failure 500 {string} string "Internal Server Error"
// @Router /system/post [put]
func edit_post(ctx *gin.Context) {
	var req vo.EditSysPostReq
	if err := ctx.ShouldBind(&req); err != nil {
		response.AjaxFailCode(ctx, response.ParamError)
		return
	}
	m, err := service.NewSysPostService().Edit(&req)
	if err != nil {
		response.AjaxFailCode(ctx, response.ServerError)
	} else {
		response.AjaxSuccess(ctx, m)
	}
}

// del_post
// @Summary 删除岗位信息表
// @Description 删除岗位信息表（管理页面）
// @Tags system-post
// @Accept json
// @Produce json
// @Success 200 {object} response.R[string] "ok"
// @Failure 400 {string} string "bad request"
// @Failure 500 {string} string "Internal Server Error"
// @Router /system/post [delete]
func del_post(ctx *gin.Context) {
	var idsStr = ctx.Param("ids")
	ids := strings.Split(idsStr, ",")
	err := service.NewSysPostService().BatchDel(ids)
	if err != nil {
		response.AjaxFailCode(ctx, response.ServerError)
	} else {
		response.AjaxSuccess(ctx, nil)
	}
}
